package jheej5024;

public class J29_BaseClass {

	//기본 클래스 base class
	//일부 인터페이스가 많은 추상 메서드를
	//가지고 있는 경우, 이것을 구현하는 클래스는
	//이 모든 메서드ABCDE를 재정의해야 함
	//하지만, 실제 사용하는 메서드가 일부C라면
	//불필요한 메서드 ABDE 를 재정의하는 것은
	//지루하고 비효율적인 작업이 될 수 있음
	
	//이런 경우 구현클래스   
	//수정하기를 원하는 메서드만 재정의함
	//이러한 용도로 사용하는 클래스를 base class라 함
	
	//아래 예에서는 BadInterface를 구현한 BadClass를 확장하여 GoodClass1, 
	//GoodClass2를 만듦
	
	//자바 웹 프로그래밍에서 서블릿 클래스를 만들때
	//Servlet이라는 5개의 추상 메서드를  포함한 인터페이스를 사용함
	//이런 경우 다 사용하지 않음에도 불구하고
	//5개의 추상메서드에 대한 구현 코드를 모두 작성
	//이에 대한 해결책으로 GenericServlet이라는
	//클래스를 확장하면 단 하나의 메서드, 
	//service 메서드만 재정의해서 사용하면 됨
	//여기서 GenericServlet은 base class임
	
	
	public static void main(String[] args) {
		

	}

}

 interface BadInterface {
	 void A();
	 char B();
	 int C();
	 String D();
	 boolean E();
 }
 
 class BadClass implements BadInterface {
	@Override
	public void A() {}
	@Override
	public char B() {return 0;}
	@Override
	public int C() {return 0;}
	@Override
	public String D() {return null;}
	@Override
	public boolean E() {return false;}
 }
 
 
 class GoodClass1 extends BadClass {
	@Override
	public int C() {
		// TODO Auto-generated method stub
		return super.C();
	}
	@Override
	public void A() {
		// TODO Auto-generated method stub
		super.A();
	}
	
 }
 
 
 
 